import BirdControl from "./BirdControl";

const { ccclass, property } = cc._decorator;

@ccclass
export default class BirdManager extends cc.Component {
  @property(cc.Prefab)
  bridPre: cc.Prefab;

  // 1s 出现一只小鸟
  time = 1;

  // 分数
  score = 0;

  @property(cc.Label)
  scoreLabel: cc.Label;

  // 返回视图
  @property(cc.Node)
  backViewDialog: cc.Node;

  protected start(): void {
    // 每隔1S创建一只小鸟,这个只是用来另一只方式,不过系统已经不推荐使用动作系统了
    // 但是使用这种方式需要 this.node.stopAllActions() 来结束循环
    // this.node.runAction(
    //   cc.repeatForever(
    //     cc.sequence(
    //       cc.delayTime(this.time),
    //       cc.callFunc(this._genBird.bind(this))
    //     )
    //   )
    // );
    this.schedule(this._genBird.bind(this), this.time);
  }

  protected onDestroy(): void {
    this.unscheduleAllCallbacks();
  }

  backView() {
    cc.director.loadScene("start");
  }

  private _genBird() {
    // 创建小鸟,（相当于创建节点）
    const bird = cc.instantiate(this.bridPre);
    // 相当于获取节点中的某个属性，而这个属性就恰好是自己写的脚本
    const birdControl = bird.getComponent(BirdControl);
    // birdControl.speed = 300;
    // 就是单纯给组件设置属性
    birdControl.dieCallback = () => {
      // 节点的显示隐藏是修改 active 属性的
      this.backViewDialog.active = true;

      // 取消所有的计时器
      this.unscheduleAllCallbacks();

      // 删除所有的子节点
      this.node.destroyAllChildren();

      // 停止所有的动画[结束循环]
      // this.node.stopAllActions();
    };

    birdControl.addScoreCallback = () => {
      this.score += 100;
      this.scoreLabel.string = this.score.toString();
    };
    // 就是相当于浏览器中的 document.body.appendChild(Node)
    // 只有把创建的节点插入到节点中才会执行渲染
    bird.setParent(this.node);
  }
}
